<?php

class login
{
    /*
     * 调用主方法
     * */
    public function index()
    {
        $method = $_SERVER['REQUEST_METHOD']; //获取请求方式
        if ($method != "GET") { //判断不是get请求便走里面的代码
            return json_encode([ //返回json报错数据
                "code"    => 0, //前后端自定义的规则，后端给code前端认为是状态码，收到code=1前端认为正常，0则为报错
                "data"    => [],//返回数据信息
                "message" => '请使用get请求' //提示内容
            ], true);
        }

        //获取请求参数，因为我们这里是要求get请求，所以$_GET就可以拿到了
        $name     = isset($_GET['name']) ? $_GET['name'] : ""; //与前端协商好的用户名字段,isset判断是否有这个设置值没有先给一个空值
        $password = isset($_GET['password']) ? $_GET['password'] : ""; //与前端协商好的用户密码字段

        //如果没有这些字段，证明用户或者前端输入，需要提示他们输入给我们
        if (empty($name) || empty($password)) { //empty判断是否为空 ||是或的意思
            return json_encode([ //返回json报错数据
                "code"    => 0, //前后端自定义的规则，后端给code前端认为是状态码，收到code=1前端认为正常，0则为报错
                "data"    => [],//返回数据信息
                "message" => '请输入账号密码' //提示内容
            ], true);
        }

        $user_info = $this->checkPassword($name, $password); //验证账号密码并返回用户信息
        //if是用bool（也就是true和false）判断，php是弱类型语言，对于有值的都会认为是true，空值 0这些会认为是false，！是取反
        //也就是我这里判断为没有值的话进行if里面的代码
        if (!$user_info) {
            //匹配不到数据我们就认为账号密码是有错误的
            return json_encode([ //返回json报错数据
                "code"    => 0, //前后端自定义的规则，后端给code前端认为是状态码，收到code=1前端认为正常，0则为报错
                "data"    => [],//返回数据信息
                "message" => '账号密码错误' //提示内容
            ], true);
        }

        //上述规则通过便获取登陆令牌
        $token = $this->getToken(); //接收token值
        //赋予这个令牌用户的信息
        $redis = new Redis(); //实例化redis
        $redis->connect("127.0.0.1"); //连接redis
        $redis->set($token, json_encode(['id'=>$user_info['id'],'name'=>$user_info['name'],'head'=>$user_info['head']], true), 1800); //设置令牌-用户信息，保存到redis上,有效期为1800秒
        return json_encode([ //返回json报错数据
            "code"    => 1, //前后端自定义的规则，后端给code前端认为是状态码，收到code=1前端认为正常，0则为报错
            "data"    => ["token" => $token,'user_info'=>$user_info], //返回token令牌给前端
            "message" => '登陆成功' //提示内容
        ], true);
    }

    /**
     * @param $user 用户名
     * @param $password 密码
     * 验证账号密码
     */
    private function checkPassword($name, $password)
    {
        $mysql     = new PDO('mysql:host=192.168.1.68;dbname=test', 'root', '123456');//链接数据库
        $sql       = "select * from `user` where `name`='" . $name . "' and `password`=" . $password; //查询语句
        $user_info = $mysql->query($sql)->fetch(); //执行查询
        return $user_info;
    }

    /**
     * 生成token唯一登陆令牌
     */
    private function getToken()
    {
        $time      = uniqid(); //针对时间戳转化而成的字符串
        $tokenSalt = 'qwewasdfQREWT938'; //自定义的盐
        $token     = md5($time . $tokenSalt); //加密生成唯一字符串
        return $token; //返回值
    }


}

$login = new login();
echo $login->index();